home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / GetHead.s < prev    next >
Encoding:
Text File  |  1996-11-10  |  10.1 KB  |  649 lines

  1. *
  2. *
  3. *       GETHEAD.S
  4. *
  5. *
  6. *
  7. include  DOSCALL.MAC
  8. include  JPEG.MAC
  9. include  work.inc
  10.  
  11.     .xref    msgCR
  12.     .xref    BaselineMsg
  13.     .xref    ProgressiveMsg
  14.     .xref    DCTMsg
  15.     .xref    msg1,msg2,msg3,msg4,msg5,msg6
  16.     .xref    jmsg1,jmsg2,jmsg3
  17.  
  18.     .xref    JPEG_not_found
  19.     .xref    Not_JPEG_error
  20.     .xref    No_Picture_error
  21.     .xref    Cant_PROC_error
  22.     .xref    Read_error
  23.     .xref    Memory_error
  24.  
  25.     .xref    MakeTree
  26.     .xref    CountCodeNumber
  27.  
  28.   .text
  29. *
  30.     .xref    PrintW,PrintWI
  31.     .xref    Print2keta
  32.     .xref    DQT,DHT
  33. *
  34.     .xdef    Get_Header
  35. *
  36. *
  37. Get_Header
  38.     lea    DHT+2(pc),a1
  39.     move.w    (a1)+,d1
  40.     subq.w    #2,d1
  41.     bsr    getdht10
  42. *
  43. *é╞éΦéáéªé╕ù^éªéτéΩé╜╠º▓┘û╝é┼èJéóé─é▌éΘ
  44. *-------------------------------
  45. *    move.w    #$020,-(sp)
  46.     clr.w    -(sp)
  47.     pea    fname(a6)
  48.     dos    _OPEN
  49.     addq.l    #6,sp
  50.     move.w    d0,Jhandle(a6)
  51.     bpl    OPEN_JPEG_END
  52.  
  53.     *èJé»é╚éóÅΩìçé═üAègÆúÄq'.JPG'é≡òté»é─èJéóé─é▌éΘ
  54.     *------------------------------------
  55.         lea.l    fname(a6),a0
  56. @@
  57.         tst.b    (a0)+
  58.         bnz    @b
  59.  
  60.         move.b    #'.',-1(a0)
  61.         move.b    #'J',(a0)+
  62.         move.b    #'P',(a0)+
  63.         move.b    #'G',(a0)+
  64.         clr.b    (a0)
  65. OPEN_JPEG_1
  66.     clr.w    -(sp)
  67.     pea    fname(a6)
  68.     dos    _OPEN
  69.     addq.l    #6,sp
  70.     move.w    d0,Jhandle(a6)
  71.     bmi    JPEG_not_found
  72.  
  73. OPEN_JPEG_END
  74.  
  75.     *╠º▓┘é╠ô·òtĵô╛
  76.     *----------------------
  77.     clr.l    -(sp)
  78.     move.w    d0,-(sp)
  79.     DOS    _FILEDATE
  80.     addq.l    #6,sp
  81.     move.l    d0,fdate(a6)
  82.  
  83.     move.l    free_adrs(a6),a5
  84.     move.l    free_size(a6),d5
  85.     sub.l    #GetHeadWorkStart-em_free_adrs+1024,d5
  86.     bcs    Memory_error
  87.     adda.l    #GetHeadWorkStart-em_free_adrs,a5
  88.     move.l    a5,GetHeadWorkAdrs(a6)
  89.     lea.l    1024(a5),a5
  90.  
  91.     move.l    #1024,file_addr(a6)
  92.     move.l    #0,file_point(a6)
  93.  
  94. *SOI
  95.  
  96. Search_SOI
  97.     bsr    getc
  98. Search_SOI_1
  99.     cmp.b    #$FF,d0
  100.     bne    Search_SOI
  101.  
  102.     bsr    getc
  103.     cmp.b    #$D8,d0
  104.     bne    Search_SOI_1
  105. *
  106. geth10
  107.     bsr    getc
  108.     cmp.b    #$FF,d0
  109.     bne    Not_JPEG_error
  110. *
  111. geth15
  112.     bsr    getc
  113. geth16
  114.     cmp.b    #$FF,d0
  115.     beq    geth15
  116. *
  117.     tst.b    d0
  118.     beq    Not_JPEG_error
  119.     cmp.b    #$D8,d0 * SOI
  120.     beq    Not_JPEG_error
  121.     cmp.b    #$D9,d0 * EOI
  122.     beq    No_Picture_error
  123.  
  124.     cmp.b    #$DA,d0
  125.     beq    getSOS
  126.  
  127.     pea    geth10(pc)
  128. *
  129.     cmp.b    #$C4,d0
  130.     beq    getDHT
  131.  
  132.     cmp.b    #$C0,d0
  133.     bcs    geth40
  134.     cmp.b    #$CF,d0
  135.     bls    getSOFx
  136. @@
  137.     cmp.b    #$DB,d0 * DQT
  138.     beq    getDQT
  139.     cmp.b    #$E0,d0 * APP0(JFIF)
  140.     beq    APP0
  141.     cmp.b    #$FE,d0 * COM
  142.     beq    getCOM
  143. *
  144. * geth_Other
  145. *
  146.   cmp.b   #$CF,d0
  147.   bls     Cant_PROC_error
  148. geth40
  149.     addq.l    #4,sp
  150.     bsr    getw
  151.     cmp.w    #$ff00,d1
  152.     bcc    geth50
  153.     subq.w    #2,d1
  154.     bcs    geth10
  155.     bsr    skip_d1_bytes
  156.     bra    geth10
  157. geth50
  158.     move.b    d1,d0
  159.     bra    geth16
  160.  
  161. *SOFxé╠Åêù¥
  162. *--------------------------
  163. getSOFx
  164.     and.b    #$0f,d0
  165.     move.b    d0,SOFx(a6)
  166.     bsr    getw
  167.     sub.w    #2,d1
  168.     bcs    Cant_PROC_error
  169.  
  170.     lea.l    1(a5),a1
  171.     cmp.l    d1,d5
  172.     bls    Cant_PROC_error
  173.     bsr    get_d1_bytes
  174.  
  175.     move.l    1+1(a5),d0
  176.     move.l  d0,Yline(a6)
  177.     subq.w    #1,d0
  178.     move.w    d0,XE(a6)
  179.     swap.w    d0
  180.     subq.w    #1,d0
  181.     move.w    d0,YE(a6)
  182.  
  183.     move.w    Xline(a6),d0
  184.     cmp.w    Yline(a6),d0
  185.     bhi    @f
  186.     move.w    Yline(a6),d0
  187. @@
  188.     move.w    d0,Maxline(a6)
  189.  
  190.  
  191.     move.b    1(a5),Qlevel_source(a6)
  192.  
  193.     move.b    1+1+2+2+1+1(a5),d0
  194.     move.b    d0,uvmode_source(a6)
  195.     moveq    #3,d1
  196.     cmp.b    #$22,d0
  197.     beq    sof20        ÉFì╖ɼò¬é≡1/4é╔è╘ê°é¡
  198.     moveq    #2,d1
  199.     cmp.b    #$21,d0        ÉFì╖ɼò¬é≡1/2é╔è╘ê°é¡
  200.     beq    sof20
  201.     moveq    #1,d1        è╘ê°é⌐é╚éó
  202. sof20
  203.     move.b    d1,uvmode(a6)
  204.  
  205.     *SOFôαùeò\Ī
  206.     *---------------
  207.     cmp.b #2,Action(a6)
  208.     bne   SOF_DISP_END
  209.  
  210.     pea     msgCR(pc)
  211.     dos     _PRINT
  212.  
  213.     move.b    SOFx(a6),d0
  214.     lea.l    BaselineMsg(pc),a0
  215.     tst.b    d0
  216.     beq    @f
  217.     lea.l    ProgressiveMsg(pc),a0
  218.     cmp.b    #2,d0
  219.     bne    Cant_PROC_error
  220. @@:
  221.     move.l    a0,-(sp)
  222.     dos    _PRINT
  223.     pea.l    DCTMsg(pc)
  224.     dos    _PRINT
  225.  
  226.     pea.l    msg1(pc)
  227.     dos    _PRINT
  228.     moveq.l    #0,d0
  229.     move.b    Qlevel_source(a6),d0
  230.     bsr    PrintW
  231.  
  232.     pea.l    msg2(pc)
  233.     dos    _PRINT
  234.     move.b    1+1+2+2(a5),d0
  235.     bsr    PrintW
  236.  
  237.     pea.l   msg3(pc)
  238.     dos     _PRINT
  239.     move.w  Xline(a6),d0
  240.     bsr     PrintW
  241.  
  242.     pea.l   msg4(pc)
  243.     dos     _PRINT
  244.     move.w  Yline(a6),d0
  245.     bsr     PrintW
  246.  
  247.     pea.l   msg5(pc)
  248.     dos     _PRINT
  249.     move.b    uvmode_source(a6),d0
  250.     and.w    #$0F,d0
  251.     bsr    PrintW
  252.  
  253.     pea.l   msg6(pc)
  254.     dos     _PRINT
  255.     move.b    uvmode_source(a6),d0
  256.     lsr.b    #4,d0
  257.     bsr    PrintW
  258.  
  259.     lea.l    9*4(sp),sp
  260.  
  261. SOF_DISP_END
  262.  
  263.     cmp.b   #8,1(a5)
  264.     bne     Cant_PROC_error
  265.     *╢╫░ëµæ£é⌐╙╔╕█ëµæ£é⌐ö╗ÆΦ
  266.     *----------------------
  267.     clr.b    colormode(a6)
  268.     cmp.b    #3,1+1+2+2(a5)
  269.     beq    getSOF_END        *╢╫░ëµæ£é┼éáéΘ
  270.     cmp.b    #1,1+1+2+2(a5)
  271.     bne    Cant_PROC_error            *æ╬Åêé┼é½é╚éó
  272.     move.b    #1,colormode(a6)    *╙╔╕█ëµæ£é┼éáéΘ
  273.  
  274. getSOF_END
  275.     rts
  276. *
  277. .xdef getSOS
  278. getSOS
  279. ****** SOS
  280.     bsr    getw
  281.     tst.b    colormode(a6)
  282.     bnz    getSOS_mono
  283. getSOS_color
  284.     sub.w    #7+2,d1
  285.     bcs    Cant_PROC_error
  286.     move.w    d1,-(sp)
  287.  
  288.     bsr    getc
  289.     cmp.b    #3,d0
  290.     bne    Cant_PROC_error
  291.     *Y
  292.     *-------------------
  293.     bsr    getw
  294.     tst.b    d1
  295.     bne    Cant_PROC_error
  296.  
  297.     *U
  298.     *-------------------
  299.     bsr    getw
  300.     cmp.b    #$11,d1
  301.     bne    Cant_PROC_error
  302.     bsr    getw
  303.     *V
  304.     *-------------------
  305.     cmp.b    #$11,d1
  306.     bne    Cant_PROC_error
  307.     bra    getSOS_1
  308.  
  309. getSOS_mono
  310.     subq.w    #3+2,d1
  311.     bcs    Cant_PROC_error
  312.     move.w    d1,-(sp)
  313.  
  314.     bsr    getc
  315.     cmp.b    #1,d0
  316.     bne    Cant_PROC_error
  317.     bsr    getw
  318.     tst.b    d1
  319.     bne    Cant_PROC_error
  320. getSOS_1
  321. *╥»╛░╝▐ò\Ī
  322. *------------------
  323.     cmp.b #2,Action(a6)
  324.     bne   SOS_DISP_END
  325.  
  326.     pea     msgCR(pc)
  327.     dos     _PRINT
  328.     addq.l  #4,sp
  329.  
  330. SOS_DISP_END
  331.  
  332.     move.w    (sp)+,d1
  333.     bra    skip_d1_bytes
  334. *
  335. *
  336. ***** COM
  337. getCOM
  338.     moveq.l    #0,d1
  339.     bsr    getw
  340.     subq.w    #2,d1
  341.     bcs    Not_JPEG_error
  342.  
  343.     move.l    d1,imsg_size(a6)
  344.     move.w    Jhandle(a6),imsg_handle(a6)
  345.     move.l    file_point(a6),imsg_start_point(a6)
  346.  
  347.     cmp.b    #2,Action(a6)
  348.     bne    skip_d1_bytes
  349.  
  350. COM_DISP
  351.     pea    msgCR(pc)
  352.     dos    _PRINT
  353.     dos    _PRINT
  354.     addq.l    #4-2,sp
  355.     moveq.l    #0,d2
  356.     bra    com60
  357. com10
  358.     bsr    getc
  359.     cmp.b    #$0d,d0
  360.     beq    com60
  361.     cmp.b    #$0a,d0
  362.     bne    com50
  363.  
  364.     pea    msgCR(pc)
  365.     dos    _PRINT
  366.     addq.l    #4,sp
  367.     bra    com60
  368.  
  369. com50
  370.     move.w    d0,(sp)
  371.     DOS    _PUTCHAR
  372. com60
  373.     dbra    d1,com10
  374.     addq.l    #2,sp
  375. com90
  376.     rts
  377.  
  378. *
  379. ***** APP0
  380. APP0
  381.     bsr    getw
  382.     sub.w    #14,d1
  383.     bcs    Cant_PROC_error
  384.     move.w    d1,-(sp)
  385. *
  386.     bsr    getw
  387.     swap.w    d1
  388.     bsr    getw
  389.     move.l    d1,d2
  390.     bsr    getc
  391.     bsr    getw    âoü[âWâçâô
  392.     bsr    getc    ûºôxÆPê╩
  393.     bsr    getw    Éàò╜ûºôx
  394.     swap.w    d1
  395.     bsr    getw    ÉéÆ╝ûºôx
  396.     move.l    d1,d3
  397.  
  398.     move.w    (sp)+,d1
  399.     bsr    skip_d1_bytes
  400.  
  401.     cmp.l    #'JFIF',d2
  402.     bne    app090
  403.  
  404.     tst.w    Aspect(a6)
  405.     bne    app010
  406.     move.l    d3,Aspect(a6)
  407. app010
  408.     cmp.b    #2,Action(a6)
  409.     bne    app090
  410.  
  411.     pea    jmsg1(pc)
  412.     dos    _PRINT
  413.     pea.l    jmsg2(pc)
  414.     dos    _PRINT
  415.     move.w    Aspect(a6),d0
  416.     bsr    PrintW
  417.     pea.l    jmsg3(pc)
  418.     dos    _PRINT
  419.     lea.l    4*3(sp),sp
  420.  
  421.     move.w    Aspect+2(a6),d0
  422.     bsr    PrintW
  423. app090
  424.     rts
  425. *
  426. *
  427. getDQT
  428. ***** DQT
  429.     bsr    getw
  430.     subq.w    #2,d1
  431.     bcs    Not_JPEG_error
  432.     cmp.w    #$84-2,d1
  433.     blt    getDQT030
  434.  
  435.     lea    DQT+4(pc),a1
  436.     bra    get_d1_bytes
  437.  
  438. getDQT030
  439.     move.l  DQTadr(a6),a1
  440.     add.l    d1,DQTadr(a6)
  441.     bra    get_d1_bytes
  442. *
  443. *
  444. *
  445. .xdef getDHT
  446. getDHT
  447.     moveq.l    #0,d1
  448.     bsr    getw
  449.     subq.w    #2,d1
  450.     bcs    Not_JPEG_error
  451.     cmp.l    d1,d5
  452.     bcs    Cant_PROC_error
  453.  
  454.     move.l    a5,a1
  455.     bsr    get_d1_bytes
  456.  
  457.     move.l    a5,a1
  458. getdht10
  459.     move.b    #$FF,(a1,d1.l)
  460. *
  461. *
  462. getdht20
  463.     move.b    (a1)+,d0
  464.     bne    @f
  465.  
  466.     bsr    CountCodeNumber
  467.     move.w    d4,DCL_bits(a6)
  468.     lea.l    RootDCL(a6),a0
  469.     lea.l    DCL_DECODE_TBL(a6),a3
  470.     move.w    #(RootDCL-DCL_DECODE_TBL)/4,d0
  471.     bra    getdht50
  472.  
  473. @@
  474.     cmp.b    #$01,d0
  475.     bne    @f
  476.  
  477.     bsr    CountCodeNumber
  478.     move.w    d4,DCC_bits(a6)
  479.     lea.l    RootDCC(a6),a0
  480.     lea.l    DCC_DECODE_TBL(a6),a3
  481.     move.w    #(RootDCC-DCC_DECODE_TBL)/4,d0
  482.     bra    getdht50
  483.  
  484. @@
  485.     cmp.b    #$10,d0
  486.     bne    @f
  487.  
  488.     bsr    CountCodeNumber
  489.     lea.l    RootACL(a6),a0
  490.     lea.l    ACL_DECODE_TBL(a6),a3
  491.     move.w    #(RootACL-ACL_DECODE_TBL)/4,d0
  492.     bra    getdht50
  493.  
  494. @@
  495.     cmp.b    #$11,d0
  496.     bne    @f
  497.  
  498.     bsr    CountCodeNumber
  499.     lea.l    RootACC(a6),a0
  500.     lea.l    ACC_DECODE_TBL(a6),a3
  501.     move.w    #(RootACC-ACC_DECODE_TBL)/4,d0
  502. getdht50
  503.     lea    16(a1),a2
  504.     bsr    MakeTree
  505.     move.l    a2,a1
  506.     bra    getdht20
  507. @@
  508.     cmp.b    #$FF,d0
  509.     bne    Cant_PROC_error
  510.     rts
  511. *
  512. *********************************************************************
  513. *
  514. *ü@éPò╢ÄÜô╟é▌ì₧é▌
  515. *
  516. *    input    none
  517. *    output    d0.b
  518. *    break    none
  519. *
  520. *********************************************************************
  521. .xdef    getc
  522. getc
  523.         move.l    a5,-(sp)
  524.  
  525.         move.l    GetHeadWorkAdrs(a6),a5
  526.         move.l    file_addr(a6),d0
  527.         cmp.l    #1024,d0
  528.         bcs    getc_1            *é▄é╛âoâbâtâ@é¬Äcé┴é─éóéΘ
  529.  
  530. *âoâbâtâ@é╔ô╟é▌ì₧é▐
  531. *-------------------------
  532.     *ô╟é▌ì₧é▐Åèé▄é┼érédédéj
  533.     *------------------------
  534.         move.w    #0,-(sp)
  535.         move.l    file_point(a6),-(sp)
  536.         move.w    Jhandle(a6),-(sp)
  537.         DOS    _SEEK
  538.         addq.l    #8,sp
  539.         tst.l    d0
  540.         bmi    Read_error
  541.     *ô╟é▌ì₧é▐
  542.     *------------------------
  543.         move.l    #1024,-(sp)
  544.         move.l    a5,-(sp)
  545.         move.w    Jhandle(a6),-(sp)
  546.         dc.w    _READ
  547.         lea    10(sp),sp
  548.         tst.l    d0
  549.         bmi    Read_error
  550.         clr.l    d0
  551.  
  552. *âoâbâtâ@é⌐éτéPâoâCâgô╟é▌ì₧é▐
  553. *-------------------------
  554. getc_1
  555.         addq.l    #1,d0
  556.         move.l    d0,file_addr(a6)
  557.         move.b    -1(a5,d0.l),d0
  558.         addq.l    #1,file_point(a6)
  559.  
  560.         move.l    (sp)+,a5
  561.         rts
  562. *********************************************************************
  563. *
  564. *    éPâÅü[âhô╟é▐
  565. *
  566. *    input    none
  567. *    output    d1.w
  568. *    break    d0.l
  569. *
  570. *********************************************************************
  571. getw
  572.         bsr    getc
  573.         lsl.w    #8,d0
  574.         move.w    d0,d1
  575.         bsr    getc
  576.         move.b    d0,d1
  577.         rts
  578. *********************************************************************
  579. *
  580. *    ÄwÆΦâoâCâgÉöâXâLâbâv
  581. *
  582. *    input    d1.w....âXâLâbâvé╖éΘâoâCâgÉö
  583. *    output    none
  584. *    break    high word of d1.l
  585. *
  586. *********************************************************************
  587. skip_d1_bytes
  588.         and.l    #$0000ffff,d1
  589.         add.l    d1,file_addr(a6)
  590.         add.l    d1,file_point(a6)
  591.         rts
  592. *********************************************************************
  593. *
  594. *    ÄwÆΦâoâCâgÉöâüâéâèé╔ô╟é▌ì₧é▐
  595. *
  596. *    input    d1.w    ô╟é▌ì₧é▐âoâCâgÉö
  597. *        a1    ô╟é▌ì₧é▐âAâhâîâX
  598. *    output    none
  599. *    break    d0.l,a1.l
  600. *
  601. *********************************************************************
  602. get_d1_bytes
  603.         movem.l    d1-d2/a0,-(sp)
  604.  
  605.         and.l    #$0000ffff,d1
  606.         beq    get_d1_bytes_end
  607.         move.l    file_addr(a6),d0
  608.         move.l    #1024,d2
  609.         sub.l    d0,d2
  610.         bhi    get_d1_bytes_1
  611.  
  612. get_d1_bytes_0
  613.         bsr    getc
  614.         move.b    d0,(a1)+
  615.         subq.w    #1,d1
  616.         beq    get_d1_bytes_end
  617.  
  618.         moveq.l    #1,d0
  619.         move.l    #1024-1,d2
  620.  
  621. get_d1_bytes_1
  622.         move.l    GetHeadWorkAdrs(a6),a0
  623.         adda.l    d0,a0
  624.  
  625.         cmp.l    d1,d2
  626.         bcs    get_d1_bytes_3
  627.  
  628.         add.l    d1,file_point(a6)
  629.         add.l    d1,file_addr(a6)
  630.         subq.w    #1,d1
  631. get_d1_bytes_2
  632.         move.b    (a0)+,(a1)+
  633.         dbra    d1,get_d1_bytes_2
  634. get_d1_bytes_end
  635.         movem.l    (sp)+,d1-d2/a0
  636.         rts
  637.  
  638. get_d1_bytes_3
  639.         add.l    d2,file_point(a6)
  640.         add.l    d2,file_addr(a6)
  641.         sub.l    d2,d1
  642.         subq.w    #1,d2
  643. get_d1_bytes_4
  644.         move.b    (a0)+,(a1)+
  645.         dbra    d2,get_d1_bytes_4
  646.         bra    get_d1_bytes_0
  647.  
  648.   .end
  649.